import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'
import './assets/styles/main.scss'

// 声明类型
declare module 'vue' {
  interface ComponentCustomProperties {
    $electronAPI: any
  }
}

console.log('Vue应用入口脚本开始执行')

// 错误处理函数
function handleError(err: any) {
  console.error('Vue应用错误:', err)
  
  // 移除加载提示
  const loading = document.getElementById('loading')
  if (loading) {
    const errorContainer = document.getElementById('error-container')
    if (errorContainer) {
      errorContainer.style.display = 'block'
      errorContainer.innerHTML = `
        <strong>应用加载错误:</strong><br>
        ${err.message || '未知错误'}<br>
        <br>
        <small>请检查控制台获取更多信息</small>
      `
    }
  }
}

try {
  console.log('创建Vue应用实例')
  
  // 创建应用实例
  const app = createApp(App)

  // 全局属性：添加Electron API
  if (window.electronAPI) {
    console.log('Electron API可用，添加到Vue全局属性')
    app.config.globalProperties.$electronAPI = window.electronAPI
  } else {
    console.warn('Electron API不可用!')
  }

  // 错误处理
  app.config.errorHandler = (err) => {
    handleError(err)
  }

  // 如果有菜单操作消息，根据操作类型导航
  if (window.electronAPI?.onMenuAction) {
    window.electronAPI.onMenuAction((data) => {
      console.log('Menu action received:', data)
      
      // 根据不同菜单操作进行不同的处理
      switch (data.action) {
        case 'view-map':
          router.push('/map')
          break
        case 'app-settings':
          router.push('/settings')
          break
        case 'about-app':
          router.push('/about')
          break
        // 其他菜单操作...
      }
    })
  }

  // 使用插件
  app.use(createPinia())
  app.use(router)

  console.log('准备挂载Vue应用')
  
  // 初始加载完成后隐藏加载提示
  router.isReady().then(() => {
    // 挂载应用
    app.mount('#app')
    console.log('Vue应用已挂载')
    
    // 隐藏加载提示
    setTimeout(() => {
      const loading = document.getElementById('loading')
      if (loading) {
        loading.style.display = 'none'
      }
    }, 500)
  })
} catch (err) {
  handleError(err)
}
